/**
* All Rights Reserved , Copyright (C) 2020 , 青岛鼎信通讯股份有限公司
*
* IMpmProjectService
* 项目立项
*
* 修改纪录
* 2020-12-25 版本：1.0 lanjianwei 创建。
* @version 版本：1.0
* @author 作者：lanjianwei
* 创建日期：2020-12-25
*/

package com.topscomm.mpm.service;

import com.topscomm.mpm.IMpmService;
import com.topscomm.mpm.pojo.MpmProjectEntity;
import com.topscomm.mpm.dao.IMpmProjectDao;
import com.topscomm.pub.vo.Page;
import com.topscomm.pub.vo.Query;
import com.topscomm.pub.vo.ResponseResult;

import java.text.ParseException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicBoolean;

public interface IMpmProjectService extends IMpmService<MpmProjectEntity, IMpmProjectDao>{
    /**
     * @description: 项目异常检测
     * @param: projectCode  项目code
     * @return: com.topscomm.pub.vo.ResponseResult<java.lang.Object>
     * @author Administrator
     * @date: 2021/1/27 10:09
     */
     ResponseResult<Object> checkProjectAbnormalState(String projectCode);


     /**
      * @author: wudaliang
      * @date: 2021-07-08 即将超期项目、里程碑及任务、任务，提前一天进行提醒。
      * @description:
      * @return: com.topscomm.pub.vo.ResponseResult<java.lang.Object>
      * @modify:
      */
     void willExpireRemind() throws Exception;
    /**
     * @author: chengengwei
     * @date: 2021-07-26
     * @description: 执行项目异常状态检测
     * @modify:
     */
    void executeCheckJob();
    /**
     * @author: chengengwei
     * @date: 2021-08-25
     * @description: 按产品线统计
     * @modify:
     */
    List<Map<String, Object>> getProductLineSummaryList(String whereSql) throws Exception;

    int updateRemindTime(String id);

    String getPermissionSQL(Map<String, Object> paramMap);
    /**
     * @author zhangjunyao
     * @Description 判断项目在决策组审批节点是否有被退回
     * @Date 2021/11/19
     * @Param project.projectcode
     * @return boolean
     **/
    boolean ifApprovalBack(Map<String, Object> paraMap);
    /**
     * @author houyuhang
     * @Description 首页信息概览内容
     * @Date 2021/11/29
     * @return List<Map<String,Object>>
     **/
    List<Map<String,Object>> queryOverdueInfo(Map<String,Object> paraMap);
    /**
     * @description: 专用于生成首页查询关联MPMPROJECT表的exist语句
     * @param: tableNam 要查询的表名称
     * @param: column 要查询的表名称和MPMPROJECT表的projectcode关联字段名称
     * @param: permissionFlage 权限标识（org：公司数据，inChargeMe：我负责的，participate：我参与的）
     * @return: java.lang.String
     * @author Administrator
     * @date: 2021/1/7 18:33
     */
    String whereExistsSqlForIndex(String tableNam, String column, String permissionFlage);
    /**
     * @author: houyuhang
     * @date: 2021-11-30
     * @description: 获取即将超期的任务
     * @return: List<Map<String,Object>>
     * @modify:
     */
    List<Map<String,Object>> querySoonOverdueTask(Map<String,Object> paraMap);
    /**
     * @author: houyuhang
     * @date: 2021-11-30
     * @description: 获取最新创建和近期完成的项目
     * @return: List<Map<String,Object>>
     * @modify:
     */
    List<Map<String,Object>> queryRecentlyCreateOrComplete(Map<String,Object> paraMap);
    /**
     * @author: houyuhang
     * @date: 2021-12-01
     * @description: 获取首页是否有“公司数据”的权限
     * @return: AtomicBoolean
     */
    AtomicBoolean getIndexPermission(Map<String,Object> paraMap);
    /**
     * @description: 首页echarts数据
     * @param: paraMap
     * @return: Map<String,Object>
     * @author houyuhang
     * @date: 2021/12/01
     */
    Map<String,Object> queryProjectLevelSatistics(Map<String,Object> paraMap);
    /**
     * @description: 获取数据看板中各个位置的组件信息
     * @param: paraMap
     * @return: List<Map<String,Object>>
     * @author houyuhang
     * @date: 2021/12/01
     */
    List<Map<String,Object>> getComponentsList(Map<String,Object> paraMap);
    /**
     * @description: 获取数据中心组件数据(整个系统中的数据统计)
     * @param: paraMap
     * @return: Map<String, Object>
     * @author houyuhang
     * @date: 2021/12/01
     */
    Map<String, Object> getDataCenterInfo(Map<String,Object> paraMap);
    /**
     * @description: 查询各个省区的项目级别数量情况
     * @param: paraMap
     * @return: Map<String, Object>
     * @author houyuhang
     * @date: 2021/12/01
     */
    Map<String, Object> queryProvincesProjectLevelsInfo(Map<String,Object> paraMap);
    /**
     * @description: 数据看板上项目级别饼图信息
     * @param: paraMap
     * @return: List<Map<String, Object>>
     * @author houyuhang
     * @date: 2021/12/01
     */
    List<Map<String, Object>> getDataBoardProjectLevelEhartInfo(Map<String,Object> paraMap);
    /**
     * @description: 查询项目列表
     * @param: paraMap
     * @return: Page
     * @author houyuhang
     * @date: 2021/12/01
     */
    Page listForMpmIndexController(Map<String,Object> paraMap);
    /**
     * 获取综合项目信息
     * @author: houyuhang
     * @date: 2021-12-01
     * @return ResponseResult<Object>
     */
    List<Map<String, Object>> overallProjectInfo(Map<String,Object> paraMap);
    /**
     * 获取项目信息 sd系统hessian调用接口
     * @author: houyuhang
     * @date: 2022-01-07
     * @return List<Map<String, Object>>
     */
    List<Map<String, Object>> queryMpmProjectCodeByChanceclue(String whereSql);
    /**
     * @description: 首页数据看板、手机端首页的where条件拼接通用方法
     * @param: paraMap
     * @return: java.util.List<com.topscomm.mpm.pojo.MpmProjectEntity>
     * @author Administrator
     * @date: 2021/1/7 18:28
     */
    String spellSqlForDataBoard(Map<String, Object> paraMap, String tableName, String columnName);

    /**
     * @author: zhangjunyao
     * @date: 2022-03-26
     * @description: 实时更新项目异常状态
     * @modify:
     */
    Map<String, Object> updateAbnormalState(String projectCode);

    /**
     * 获取某省区项目 sd系统hessian调用接口
     * @author: hdy
     * @date: 2022-04-15
     * @return Page
     */
	Page queryMpmProjectByDeptcommonCode(String whereSql, Query query);
	/***
	 * @description: 关注发送消息
	 * @param paraMap1
	 * @return
	 * @author: jiangtao1
	 * @date: 2022/5/11 17:02
	 * @modify:
	 */

    void sendFocusMessage(Map<String,Object> paraMap1);

    /***
     * @description: 置顶功能
     * @param paraMap
     * @return
     * @author: jiangtao1
     * @date: 2022/8/9 14:29
     * @modify:
     */
    String changeTop(Map<String, Object> paraMap);
    /***
     * @description: 项目编号增加春季、秋季攻势前缀(春季 1;秋季 2; 无 null)
     * @return
     * @author: houyuhang
     * @date: 2022/10/12
     * @modify:
     */
    void addProjectAttackFirst(String projectcode, String param);

    boolean queryReviewMeetInfo(String token, Map<String, Object> paraMap);

    void syncProjectEndDate(List<Map<String, Object>> dateList);

    void setFourPageFields(List<Map<String, Object>> tempList);
}
